#include "ulib.h"

static ips_node_t *nf_ipc[PROCESS_MAX_COUNT];

void
ipc_init(void)
{
	 int i;
	 for (i = 0; i != PROCESS_MAX_COUNT; ++ i)
	 {
		  nf_ipc[i] = ips_alloc();
	 }
}

void
ipc_node_init(struct ipc_node_t *node)
{
	 bqueue_init(&node->conn);
	 bqueue_init(&node->send);
	 bqueue_init(&node->recv);
}

void
ipc_connect(struct ipc_node_t *node)
{
	 bqueue_put(&node->conn, nf_ipc[cur_pid()]);
}

void
ipc_accept(struct ipc_node_t *node)
{
	 bqueue_get(&node->conn, nf_ipc[cur_pid()]);
}

void
ipc_cli_trans_yield(struct ipc_node_t *node)
{
	 bqueue_put(&node->send, nf_ipc[cur_pid()]);
}

void
ipc_cli_trans_wait(struct ipc_node_t *node)
{
	 bqueue_get(&node->recv, nf_ipc[cur_pid()]);
}

void
ipc_ser_trans_yield(struct ipc_node_t *node)
{
	 bqueue_put(&node->recv, nf_ipc[cur_pid()]);
}

void
ipc_ser_trans_wait(struct ipc_node_t *node)
{
	 bqueue_get(&node->send, nf_ipc[cur_pid()]);
}
